/**
 * Created by 付梦佳 on 2016/5/23.
 */
var SPSdk = (function () {
    var API_URL="http://api.99kgames.com/vendor/api/userinfo";//API接口
    var SDK_URL="http://cdn.99kgames.com/js/tpgame_sdk.min.js";//SDK路径

    function SPSdk() {
        this.spId = 0;
        this.appId = "";
        this.appKey = "";
        this.token = "";
        this.spFname = "";
        this.openKey = "";
        this.queryParams = {};
        this._callback = null;
    }

    var __proto = SPSdk.prototype;

    __proto.login = function (param, callback) {
        console.log("游戏金榜登录：" + JSON.stringify(param));
        var m_this = this;
        if(m_this.queryParams.queryParams.access_token==null || m_this.queryParams.queryParams.access_token==undefined)
        {
            m_this.queryParams.queryParams.access_token="";
        }
        if(m_this.queryParams.appId==null || m_this.queryParams.appId==undefined)
        {
            m_this.queryParams.appId="";
        }
        if(m_this.queryParams.appKey==null || m_this.queryParams.appKey==undefined)
        {
            m_this.queryParams.appKey="";
        }
        var sParam = "access_token="+m_this.queryParams.queryParams.access_token+
                    "&partnerid="+m_this.queryParams.appId+
                    m_this.queryParams.appKey;
        var sign = hex_sha1(sParam);
        var signs ="access_token="+m_this.queryParams.queryParams.access_token+
            "&partnerid="+m_this.queryParams.appId+
            "&sign="+sign;
        LayaCommon.getPostJson(encodeURIComponent(API_URL), encodeURIComponent(signs), "GET", m_this.queryParams.queryParams.access_token,function(res) {
            var data=JSON.parse(res.data[0]);
            if(data.code==0){
                callback && callback({"result": 0, "spuid": data.userid,"desc":"登陆成功"});
            }else
            {
                callback && callback({"result":-2,"desc":"登陆失败"});
            }
        });
        }
    __proto.pay = function (param, callback) {
        var m_this = this;
        console.log("游戏金榜支付：" + JSON.stringify(param));
        m_this._callback = callback;

        if(param.data.orderId==null || param.data.orderId==undefined){
            param.data.orderId="";
        }
        var signS = "attach="+param.data.orderId+"&body="+""+"&detail="+""+"&out_trade_no="+param.data.orderId+"&product_id="+param.data.orderId+"&total_fee="+param.data.amount;
        var params = signS+ m_this.queryParams.appKey;
        var _signS = hex_sha1(params);
        var params = {
            out_trade_no:param.data.orderId,
            product_id:param.data.orderId,
            total_fee:param.data.amount,
            body:"",
            detail:"",
            attach:param.data.orderId,
            sign:_signS};
        TPGAME_SDK&&TPGAME_SDK.pay(params);
    }
    __proto.init = function (param, callback) {
        console.log("游戏金榜初始化：" + JSON.stringify(param));
        var m_this = this;
        m_this.queryParams = param;
        callback && callback({"result": 0, "desc": "OK"});
        LayaCommon.loadScript(SDK_URL,function(sdkRes){
            if(sdkRes.result == 0)
                    callback && callback({"result": 0, "desc": "OK"});
            var params = {
                pay:{
                    success:function(){_callback && _callback({"result": "0","spuid":m_this.queryParams.appId,"desc": "充值成功"})},
                    cancel:function(){ _callback && _callback({"result": "-2","desc": "fail"});}
                }
            }
            TPGAME_SDK&&TPGAME_SDK.config(params);
        });
    }
    var hexcase = 0;
    var b64pad = "";
    var chrsz   = 8;
    function hex_sha1(s){return binb2hex(core_sha1(str2binb(s),s.length * chrsz));}
    function core_sha1(x, len)
    {
        x[len >> 5] |= 0x80 << (24 - len % 32);
        x[((len + 64 >> 9) << 4) + 15] = len;

        var w = Array(80);
        var a = 1732584193;
        var b = -271733879;
        var c = -1732584194;
        var d = 271733878;
        var e = -1009589776;

        for(var i = 0; i < x.length; i += 16)
        {
            var olda = a;
            var oldb = b;
            var oldc = c;
            var oldd = d;
            var olde = e;

            for(var j = 0; j < 80; j++)
            {
                if(j < 16) w[j] = x[i + j];
                else w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1);
                var t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
                    safe_add(safe_add(e, w[j]), sha1_kt(j)));
                e = d;
                d = c;
                c = rol(b, 30);
                b = a;
                a = t;
            }

            a = safe_add(a, olda);
            b = safe_add(b, oldb);
            c = safe_add(c, oldc);
            d = safe_add(d, oldd);
            e = safe_add(e, olde);
        }
        return Array(a, b, c, d, e);

    }
    function sha1_ft(t, b, c, d)
    {
        if(t < 20) return (b & c) | ((~b) & d);
        if(t < 40) return b ^ c ^ d;
        if(t < 60) return (b & c) | (b & d) | (c & d);
        return b ^ c ^ d;
    }
    function sha1_kt(t)
    {
        return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
            (t < 60) ? -1894007588 : -899497514;
    }
    function safe_add(x, y)
    {
        var lsw = (x & 0xFFFF) + (y & 0xFFFF);
        var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
        return (msw << 16) | (lsw & 0xFFFF);
    }
    function rol(num, cnt)
    {
        return (num << cnt) | (num >>> (32 - cnt));
    }
    function str2binb(str)
    {
        var bin = Array();
        var mask = (1 << chrsz) - 1;
        for(var i = 0; i < str.length * chrsz; i += chrsz)
            bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (32 - chrsz - i%32);
        return bin;
    }
    function binb2hex(binarray)
    {
        var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
        var str = "";
        for(var i = 0; i < binarray.length * 4; i++)
        {
            str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +
                hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);
        }
        return str;
    }
    return SPSdk;
})();
